package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.SicControleDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class SicControle implements Serializable {

	private String id = "";
	private String numeroChassi = "";
	private String nomeRequerente = "";
	private String enderecoRequerente = "";
	private String numeroIdentidade = "";
	private String destinoSolicitacao = "";
	private Integer dataEmissao = 0;
	private Integer tipoDocumento = 0;
	private Integer matriculaFunc = 0;
	private Long valorPago = 0L;
	private Integer codigoRecuperacao = 0;
	private Long numeroDocumento = 0L;
	private Integer codigoMunicipio = 0;
	private Integer datcan = 0;
	private Integer matcan = 0;
	private String renaid = "";
	private ResultSet consulta = null;
	private SicControleDAO sicControleDAO = new SicControleDAO();

	public SicControle() {
		super();
	}

	public SicControle(String id, String numeroChassi, String nomeRequerente, String enderecoRequerente, String numeroIdentidade, String destinoSolicitacao, Integer dataEmissao, Integer tipoDocumento, Integer matriculaFunc, Long valorPago, Integer codigoRecuperacao, Long numeroDocumento, Integer codigoMunicipio, Integer datcan, Integer matcan, String renaid) {
		super();
		this.id = id;
		this.numeroChassi = numeroChassi;
		this.nomeRequerente = nomeRequerente;
		this.enderecoRequerente = enderecoRequerente;
		this.numeroIdentidade = numeroIdentidade;
		this.destinoSolicitacao = destinoSolicitacao;
		this.dataEmissao = dataEmissao;
		this.tipoDocumento = tipoDocumento;
		this.matriculaFunc = matriculaFunc;
		this.valorPago = valorPago;
		this.codigoRecuperacao = codigoRecuperacao;
		this.numeroDocumento = numeroDocumento;
		this.codigoMunicipio = codigoMunicipio;
		this.datcan = datcan;
		this.matcan = matcan;
		this.renaid = renaid;
	}

	public void grava() {

		try {
			this.id = sicControleDAO.insert(numeroChassi, nomeRequerente, enderecoRequerente, numeroIdentidade, destinoSolicitacao, dataEmissao, tipoDocumento, matriculaFunc, valorPago, codigoRecuperacao, numeroDocumento, codigoMunicipio, datcan, matcan, renaid);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualiza() {

		try {
			sicControleDAO.update(this.id, numeroChassi, nomeRequerente, enderecoRequerente, numeroIdentidade, destinoSolicitacao, dataEmissao, tipoDocumento, matriculaFunc, valorPago, codigoRecuperacao, numeroDocumento, codigoMunicipio, datcan, matcan, renaid);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean pesquisaDataEmissaoFaixa(Integer pDataEmissao1, Integer pDataEmissao2) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.findDataEmissaoin(pDataEmissao1, pDataEmissao2);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaMutidt(Integer pCodigoMunicipio, Integer pTipoDocumento, Integer pDataEmissao1, Integer pDataEmissao2) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.findMutidt(pCodigoMunicipio, pTipoDocumento, pDataEmissao1, pDataEmissao2);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaNumeroChassi(String pNumeroChassi) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.findNumeroChassi(pNumeroChassi);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaNumeroDocumentoTipoDocumento(Long pNumeroDocumento, Integer pTipoDocumento) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.findNumeroDocumentoTipoDocumento(pNumeroDocumento, pTipoDocumento);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaNumeroDocumentoTipoDocumentoIn(Long pNumeroDocumento, Integer pTipoDocumento1, Integer pTipoDocumento2) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.findNumeroDocumentoTipoDocumentoin(pNumeroDocumento, pTipoDocumento1, pTipoDocumento2);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leitura() {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.read();
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraNumeroChassiMaiorig(String pNumeroChassi) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.readNumeroChassige(pNumeroChassi);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraNumeroDocumentoMaiorig(Long pNumeroDocumento) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.readNumeroDocumentoge(pNumeroDocumento);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaNumeroChassi(String pNumeroChassi) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.selectNumeroChassi(pNumeroChassi);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaNumeroDocumento(Long pNumeroDocumento) {

		try {
			if (consulta == null) {
				consulta = sicControleDAO.selectNumeroDocumento(pNumeroDocumento);
			} else {
				consulta = sicControleDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(sicControleDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.numeroChassi = lista.getString("numeroChassi");
			this.nomeRequerente = lista.getString("nomeRequerente");
			this.enderecoRequerente = lista.getString("enderecoRequerente");
			this.numeroIdentidade = lista.getString("numeroIdentidade");
			this.destinoSolicitacao = lista.getString("destinoSolicitacao");
			this.dataEmissao = lista.getInt("dataEmissao");
			this.tipoDocumento = lista.getInt("tipoDocumento");
			this.matriculaFunc = lista.getInt("matriculaFunc");
			this.valorPago = lista.getLong("valorPago");
			this.codigoRecuperacao = lista.getInt("codigoRecuperacao");
			this.numeroDocumento = lista.getLong("numeroDocumento");
			this.codigoMunicipio = lista.getInt("codigoMunicipio");
			this.datcan = lista.getInt("datcan");
			this.matcan = lista.getInt("matcan");
			this.renaid = lista.getString("renaid");
		} catch (SQLException e) {
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getNumeroChassi() {
		return numeroChassi;
	}

	public void setNumeroChassi(String numeroChassi) {
		this.numeroChassi = numeroChassi;
	}

	public String getNomeRequerente() {
		return nomeRequerente;
	}

	public void setNomeRequerente(String nomeRequerente) {
		this.nomeRequerente = nomeRequerente;
	}

	public String getEnderecoRequerente() {
		return enderecoRequerente;
	}

	public void setEnderecoRequerente(String enderecoRequerente) {
		this.enderecoRequerente = enderecoRequerente;
	}

	public String getNumeroIdentidade() {
		return numeroIdentidade;
	}

	public void setNumeroIdentidade(String numeroIdentidade) {
		this.numeroIdentidade = numeroIdentidade;
	}

	public String getDestinoSolicitacao() {
		return destinoSolicitacao;
	}

	public void setDestinoSolicitacao(String destinoSolicitacao) {
		this.destinoSolicitacao = destinoSolicitacao;
	}

	public Integer getDataEmissao() {
		return dataEmissao;
	}

	public void setDataEmissao(Integer dataEmissao) {
		this.dataEmissao = dataEmissao;
	}

	public Integer getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(Integer tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public Integer getMatriculaFunc() {
		return matriculaFunc;
	}

	public void setMatriculaFunc(Integer matriculaFunc) {
		this.matriculaFunc = matriculaFunc;
	}

	public Long getValorPago() {
		return valorPago;
	}

	public void setValorPago(Long valorPago) {
		this.valorPago = valorPago;
	}

	public Integer getCodigoRecuperacao() {
		return codigoRecuperacao;
	}

	public void setCodigoRecuperacao(Integer codigoRecuperacao) {
		this.codigoRecuperacao = codigoRecuperacao;
	}

	public Long getNumeroDocumento() {
		return numeroDocumento;
	}

	public void setNumeroDocumento(Long numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	public Integer getCodigoMunicipio() {
		return codigoMunicipio;
	}

	public void setCodigoMunicipio(Integer codigoMunicipio) {
		this.codigoMunicipio = codigoMunicipio;
	}

	public Integer getDatcan() {
		return datcan;
	}

	public void setDatcan(Integer datcan) {
		this.datcan = datcan;
	}

	public Integer getMatcan() {
		return matcan;
	}

	public void setMatcan(Integer matcan) {
		this.matcan = matcan;
	}

	public String getRenaid() {
		return renaid;
	}

	public void setRenaid(String renaid) {
		this.renaid = renaid;
	}

	public void fecha() {
		sicControleDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return sicControleDAO.nroRegistro;
	}

	public long totalRegistros() {
		return sicControleDAO.qtdRegistros;
	}

}
